package com.sjh.lib_app

import android.app.Application
import android.content.Context
import android.os.Build
import android.webkit.WebView
import androidx.multidex.MultiDex
import com.alibaba.android.arouter.launcher.ARouter
import com.blankj.utilcode.util.AppUtils
import com.blankj.utilcode.util.LogUtils
import com.blankj.utilcode.util.Utils
import com.scwang.smartrefresh.layout.SmartRefreshLayout
import com.scwang.smartrefresh.layout.constant.SpinnerStyle
import com.scwang.smartrefresh.layout.footer.ClassicsFooter
import com.scwang.smartrefresh.layout.header.ClassicsHeader

import com.sjh.lib_update.AppUpDateManage
import com.sjh.application.ApplicationUtils
import com.sjh.baseutils.Preference
import com.sjh.baseutils.bugly.BugReport.initBugly
import com.sjh.baseui.picture.LibPicture
import com.sjh.baseutils.loge
import com.sjh.lib_update.AppUpDateManage.Companion.checkUrl
import com.sjh.lib_update.AppUpDateManage.Companion.downloadUrl
import me.jessyan.autosize.AutoSizeConfig


/**
 * 所有模块AndroidManifest.xml中的name都应该直接使用AppApplication
 * 所有公用的初始化全部在这里进行
 * 如果某些模块需要单独初始化一些类，请实现ApplicationInterface接口，并使用com.yzjt.application.Application注解
 *
 * @com.yzjt.application.Application
 * class Test1App:ApplicationInterface {
 *  override fun init(application: Application?) {
 *      "初始化模块".loge()
 *  }
 * }
 * @author Extends
 * @date 2020/6/19
 */
class AppApplication : Application() {
    var shareStudent: ShareStudentData? = null

    companion object {
        lateinit var application: AppApplication
    }

    fun setShareStudentInterface(shareStudent: ShareStudentData) {
        this.shareStudent = shareStudent
    }

    fun getShareStudentInterface() = shareStudent

    override fun onCreate() {
        super.onCreate()
        application = this
        initArouter()
        initAutoSize()
        LibPicture.init(context = this, placeHolder = R.drawable.app_icon_error)
        Preference.initMMKV(application)
        ApplicationUtils.init(this)

        initUpDateApk()
        Utils.init(this)
        ARouter.init(this)
        webviewSetPath(this)

        //因为AppConfig需要在壳工程里面配置，所以与AppConfig有关的应该在ApplicationUtils.init方法后初始化
        //配置LogUtils的开关
        LogUtils.getConfig().isLogSwitch = AppConfig.isShowLog()
        //配置下拉刷新控件
        //初始化下拉刷新 上拉加载更多布局
        initRefresh()
        initBugly(
            context = this,
            appId = AppConfig.env.buglyAppID,
            isDebug = AppConfig.isShowLog(),
            channel = AppConfig.env.channelName
        )
    }

    override fun attachBaseContext(base: Context?) {
        super.attachBaseContext(base)
        MultiDex.install(this)
    }


    /**
     * 初始化 umeng
     */
//    private fun initUmeng() {
//        UMConfigure.init(
//                this,
//                "5fc5e06d5a31bc1b28ee3572",
//                AppConfig.environmentTag,
//                UMConfigure.DEVICE_TYPE_PHONE,
//                "fe175e901506641f7ad348ad13f218b4"
//        )
//        UMConfigure.setLogEnabled(AppConfig.isShowLog())
//        //选用AUTO模式采集页面数据
//        MobclickAgent.setPageCollectionMode(MobclickAgent.PageMode.MANUAL)
//    }

    /**
     * 初始化 更新 模块
     */
    private fun initUpDateApk() {
        AppUpDateManage.init(application).apply {
            downloadUrl = AppConfig.getAppUrl()
            checkUrl = "/api/app/version/check"
        }
    }

    /**
     * ARouter初始化
     */
    private fun initArouter() {
        ARouter.openLog()     // 打印日志
        ARouter.openDebug()   // 开启调试模式(如果在InstantRun模式下运行，必须开启调试模式！线上版本需要关闭,否则有安全风险)
        ARouter.init(this); // 尽可能早，推荐在Application中初始化
    }

    /**
     * 分辨率适配
     */
    private fun initAutoSize() {
//        AutoSizeConfig.getInstance().apply {
//            designHeightInDp = 625
//            designWidthInDp = 375
//        }
    }

    /**
     * 初始化刷新布局
     */
    private fun initRefresh() {
        SmartRefreshLayout.setDefaultRefreshHeaderCreator { context, layout ->
            //开始设置全局的基本参数
            layout.setDisableContentWhenRefresh(false)
            layout.setEnableAutoLoadMore(false)
            //更多的 set 方法
            ClassicsHeader.REFRESH_HEADER_UPDATE = "上次更新时间：yyyy-MM-dd HH:mm:ss"
            ClassicsHeader(context).setSpinnerStyle(SpinnerStyle.Translate).setFinishDuration(200)
            MyRefreshHead(context)
        }
        SmartRefreshLayout.setDefaultRefreshFooterCreator { context, layout ->
            layout.setDisableContentWhenLoading(false)
            layout.setEnableAutoLoadMore(true)
            ClassicsFooter(context).setSpinnerStyle(SpinnerStyle.Translate).setFinishDuration(0)
        }


    }


    /**
     * 初始化 webview
     */
    fun webviewSetPath(context: Context) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
            val processName = getProcessName()
            if (AppUtils.getAppPackageName() != processName) {
                //判断不等于默认进程名称
                WebView.setDataDirectorySuffix(processName)
            }
        }
    }

}